package com.logistic.server.service;

import com.logistic.server.entity.common.PageRequest;
import com.logistic.server.entity.common.PageResponse;
import com.logistic.server.entity.pojo.SysUser;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 用户信息 服务类
 * </p>
 *
 * @author swen
 * @since 2021-10-26
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 通过openid取用户信息
     * @param openid openid
     * @return user
     */
    SysUser findByOpenId(String openid);

    /**
     * 分页查询用户列表
     * @param user 用户信息
     * @param pageRequest 分页
     * @return list
     */
    PageResponse<SysUser> selectPageUserList(SysUser user, PageRequest pageRequest);

    /**
     * 根据条件分页查询已分配用户角色列表
     *
     * @param user 用户信息
     * @param pageRequest 分页
     * @return 用户信息集合信息
     */
    PageResponse<SysUser> selectAllocatedList(SysUser user, PageRequest pageRequest);

    /**
     * 根据条件分页查询未分配用户角色列表
     *
     * @param user 用户信息
     * @param pageRequest 分页
     * @return 用户信息集合信息
     */
    PageResponse<SysUser> selectUnallocatedList(SysUser user, PageRequest pageRequest);

    /**
     * 通过用户ID查询用户
     *
     * @param userId 用户ID
     * @return 用户对象信息
     */
    SysUser selectUserById(Long userId);

    /**
     * 通过用户名字查询用户
     *
     * @param userName 用户名字
     * @return 用户对象信息
     */
    SysUser selectUserByUserName(String userName);

    /**
     * 修改用户状态
     *
     * @param user 用户信息
     */
    void updateUserStatus(SysUser user);

    /**
     * 校验用户是否允许操作
     *
     * @param user 用户信息
     */
    void checkUserAllowed(SysUser user);

    /**
     * 添加用户
     * @param user 用户信息
     */
    void insertUser(SysUser user);

    /**
     * 删除用户
     * @param ids ids
     */
    void deleteUser(List<String> ids);

    /**
     * 修改用户
     * @param user 用户
     */
    void updateUser(SysUser user);

    /**
     * 用户授权角色
     *
     * @param userId  用户ID
     * @param roleIds 角色组
     */
    void insertUserAuth(Long userId, Long[] roleIds);

    /**
     * 根据用户ID查询用户所属角色组
     *
     * @param userName 用户名
     * @return 结果
     */
    String selectUserRoleGroup(String userName);

    /**
     * 根据用户ID查询用户所属岗位组
     *
     * @param userName 用户名
     * @return 结果
     */
    String selectUserPostGroup(String userName);

    /**
     * 个人信息修改
     * @param user 用户
     */
    void updateProfile(SysUser user);

    /**
     * 修改密码
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     */
    void updatePwd(String oldPassword, String newPassword);

    /**
     * 修改图片路径
     * @param avatar 图片路径
     */
    void updateUserAvatar(String avatar);
}
